/**
 * JsonTool
 * @author 冰凝
 * @date 2022-09-19 09:42:20
 **/
export class JsonTool {
    public static toJson(o: any) {
        return JSON.stringify(o)
    }

    public static toNiceJson(o: any) {
        return JSON.stringify(o, null, 4)
    }

    /**
     * @param s {string}
     * @return boolean
     */
    public static isJsonArray(s: any) {
        return s && s.startsWith('[') && s.endsWith(']')
    }

    /**
     * @param s {string}
     * @return boolean
     */
    public static isJsonObject(s: any) {
        return s && s.startsWith('{') && s.endsWith('}')
    }

    /**
     * @param s {string}
     * @param isArr {(arr: Array<any>) => any}
     * @param isObj {(obj: Record<string, any>) => any}
     * @param other {(v: null | undefined | number | string) => any}
     */
    public static switchParse(s: any, isArr: any, isObj: any, other = () => {}) {
        if (!s) {
            return null
        }
        if (this.isJsonArray(s)) {
            return isArr(JSON.parse(s))
        }
        if (this.isJsonObject(s)) {
            return isObj(JSON.parse(s))
        }
        // @ts-ignore
        return other(s)
    }

    public static parse(json: any) {
        if (!json) {
            return json
        }
        try {
            return JSON.parse(json)
        } catch (e) {
            console.debug('JSON 解析错误: ', e)
        }
        return null
    }
}
